Reference
- 문제 출처 - HackerRank
- 파이썬 연습 - Practice - Python
개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다
HackerRank
HackerRank의 Python 연습문제들은 아래와 같은 카테고리로 분류 된다:
Subdomain
IntroductionBasic Data Types- Strings
- Sets
- Math
- Itertools
- Collections
- Date and Time
- Errors and Exceptions
- Classes
- Built-Ins
- Python Functionals
- Regex and Parsing
- XML
- Closures and Decorators
- Numpy
- Debugging
Strings
기본 개념
Mutations
list형은 mutable하지만, tuple형은 immutable하다
immutable한 string 변수가 있을 때, 이를 수정하려면 어떻게 해야할까?
예제 : 5번째 위치의 ‘a’ 문자를 ‘k’로 바꿔라
abracadabra
5 k
abrackdabra
5가지 방법으로 문제를 해결해보고 각각의 시간을 측정해보았다
결과를 보면 ''.join()
함수만 사용한 방법이(아래 코드의 4번째 slice_join_2
) 가장 수행속도가 빠르다
당연하지만 되도록이면 list()
, format()
함수를 사용하거나, 반복문(list comprehension 안에 반복문을 사용)을 사용하지 않는 것이 5~10배 정도 수행시간을 단축시킬 수 있다
import time |
- 수행시간이 워낙 빠르다보니 부동소수점 e로 표현이 되는데 한눈에 파악하기 어려워 임의로 100을 곱하고 반올림하였다
(참고: e앞에 부분이 가수부, e뒤에 부분이 지수부이며 밑수는 10이라는 의미
14e2는 14 x 10^2이므로 1400, 123e-3이라면 123 x 10^-3 = 123 x 0.001 = 0.123이다)
# input |
Find a string
예제 : ABCDCDC에서 CDC가 몇 번 나타나는가
ABCDCDC
CDC
2
import time |
- list comprehension을 사용하는 것이 아주 미세하게 빠르다
# input |
String Validators
아래 함수들은 각각 문자열이 해당 범위에 속하는지 확인한다str.isalnum()
: alphanumeric(a-z, A-Z and 0-9)str.isalpha()
: alphabetical (a-z and A-Z)str.isdigit()
: 숫자 (0-9)str.islower()
: 소문자 (a-z)str.isupper()
: 대문자 (A-Z)
예제 : 입력되는 문자열이 alphanumeric, alphabetical, digits, lowercase와 uppercase를 가지는지 True/False로 출력
qA2
True
True
True
True
True
if **name** == '**main**': |